package com.utils;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 关于字符的一些工具方法
 * <ul>
 * <li>{@link StringUtil#str2Trim(String)} 将字符前后的空格去掉</li>
 * <li>{@link StringUtil#isEmpty(String)} 判断字符是否为空</li>
 * <li>{@link StringUtil#getFristLetter(String)} 获取首字母</li>
 * </ul>
 *
 * @author Winton 2017年3月9日 15时19分
 * @version 1.0
 */
public class StringUtil {

	/**
	 * 使用java正则表达式去掉多余的.与0
	 * @param s
	 * @return
	 */
	public static String subZeroAndDot(String s){
		if(s.indexOf(".") > 0){
			s = s.replaceAll("0+?$", "");//去掉多余的0
			s = s.replaceAll("[.]$", "");//如最后一位是.则去掉
		}
		return s;
	}

	/**
	 * 将字符前后的空格去掉
	 *
	 * @param str
	 *            需要处理的字符串
	 * @return 返回处理后的字符串
	 */
	public static String str2Trim(String str) {
		if (str != null  && !"".equals(str.trim())) {
			return str.trim();
		}
		return null;
	}

	/**
	 * 判断字符是否为空 <br />
	 * 空返回TRUE <br />
	 * 非空返回FALSE
	 *
	 * @param str
	 *            需要处理的字符串
	 * @return
	 */
	public static Boolean isEmpty(String str) {
		if (str == null || "".equals(str.trim())) {
			return true;
		}
		return false;
	}

	/**
	 * 验证字符串是否符合条件（支付参数验证）
	 * @param str 验证字符串
	 * @param length 超过的长度
	 * @return
	 */
	public static Boolean isCondition(String str,Integer length){
		if(length == null){
			if(str == null){
				return true;
			}
		}else{
			if(str == null || "".equals(str) || getWordCountRegex(str) > length){
				return true;
			}
		}
		return false;
	}

	/**
	 * 获取字符串的长度
	 * <ul>
	 *	<li>
	 *	    由于java中的中文长度并非字节长度，而是汉字的长度，故用此方法将双字节的内容替换成两个*
	 *	</li>
	 * <ul/>
	 * @param s
	 * @return
	 */
	public static int getWordCountRegex(String s){

		s = s.replaceAll("[^\\x00-\\xff]", "**");
		int length = s.length();
		return length;
	}

	/**
	 * 获取首字母
	 * <ul>
	 * <li>林啸虎 2015年10月26日 新建</li>
	 * </ul>
	 *
	 * @param str 需要截取的字母
	 * @return
	 */
	public static String getFristLetter(String str) {
		String s = "";
		if(str.length() > 1){
			s = str.substring(0, 1);
		}
		return s;
	}

	/**
	 * 关于加密后密码截取（截取规则 从第二位开始截取，到倒数第三位 一共截取29位字符串）
	 * @author 	hj
	 * @time	2017年3月21日13:36:07
	 * @param str 需要截取的字母（32位加密字符串）
	 * @return
	 */
	public static String subPassword(String str){
		if(StringUtil.isEmpty(str)){
			return "";
		}
		return str.substring(1,30);
	}
	/**
	 *@Description: 判断字符串是否为整数
	 *@author: hj
	 *@Date: 2017/4/17 0017 下午 17:46
	 *@prams:
	 * * @param str
	 *@return:
	 */
	public static boolean isNumeric(String str){
		for (int i = 0; i < str.length(); i++){
			System.out.println(str.charAt(i));
			if (!Character.isDigit(str.charAt(i))){
				return false;
			}
		}
		return true;
	}

	/**
	 * 判断某一个字符串数组中是否含有某一字符串
	 * @param str
	 * @param strArr
	 * @return
	 */
	public static boolean existStrArr(String str,String[]strArr){
		for(int i=0;i<strArr.length;i++){
			if(strArr[i].equals(str)){
				return true;
			}
		}
		return false;
	}

	/**
	 * 将字符串转换成map
	 * @param str 字符串格式为key=value&key1=value1的形式
	 * @return
	 */
	public static Map<String,String> string2Map(String str){

		Map<String,String> map = new HashMap<>();

		String[] one = str.split("&");

		for(int i = 0;i<one.length;i++){

			String[] two = one[i].split("=");

			if(two.length == 2){
				map.put(two[0],two[1]);
			}else if (two.length == 1){
				map.put(two[0],"");
			}else {
				map.put(two[0], two[1] + "=" + two[2]);
			}
		}

		return map;
	}

	/**
	 * 将字符串转换成map
	 * @param str 字符串格式为key=value&key1=value1的形式
	 * @return
	 */
	public static Map<String,String> string2MapBypf(String str){

		Map<String,String> map = new HashMap<>();

		String[] one = str.split("&");

		for(int i = 0;i<one.length;i++){

			if(one[i].indexOf("signature")>-1){
				String sign = one[i].replaceAll("signature=", "");
				map.put("signature",sign);
			}else if(one[i].indexOf("codeUrl")>-1){
				String code = one[i].replaceAll("codeUrl=", "");
				map.put("codeUrl",code);
			}else{
				String[] two = one[i].split("=");
				if(two.length == 2){
					map.put(two[0],two[1]);
				}else {
					map.put(two[0], two[1] + "=" + two[2]);
				}
			}
		}

		return map;
	}

	/**
	 * String字符串转成List<Long>数据格式
	 * String str = "1,2,3,4,5,6" -> List<Long> listLong [1,2,3,4,5,6];
	 * @param strArr
	 * @return
	 */
	public static List<Long> stringToLongList(String strArr) {
		return Arrays.stream(strArr.split(","))
				.map(s -> Long.parseLong(s.trim()))
				.collect(Collectors.toList());
	}

	/**
	 * String字符串转成List<String>数据格式
	 * String str = "1,2,3,4,5,6" -> List<String> listLong [1,2,3,4,5,6];
	 * @param strArr
	 * @return
	 */
	public static List<String> stringToStringList(String strArr) {
		String str[] = strArr.split(",");
		return Arrays.asList(str);
	}

	public static void main(String[] args) {
		BigDecimal decimal = new BigDecimal(256);
		BigDecimal decimal2 = new BigDecimal(100);
		Double mony = Double.parseDouble(decimal.divide(decimal2).setScale(2, BigDecimal.ROUND_HALF_EVEN) + "");
		System.out.println(mony);
	}
}
